﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


//函数实现乘法口诀表
//void excel_mul()
//{
//	int i = 0;
//	for (i = 1; i <=9; i++)
//	{
//		int j = 0;
//		for (j = 1; j <= i; j++)
//		{
//			printf("%d*%d=%d ", i, j, i * j);
//		}
//		printf("\n");
//	}
//}
//int main()
//{
//	excel_mul();
//	return 0;
//}


//函数判断闰年
//void is_leap_year(n)
//{
//	if ((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0))
//	{
//		printf("The year is leap year!");
//	}
//	else
//	{
//		printf("The year is not leap year!!!");
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	is_leap_year(n);
//	return 0;
//}

//实现一个函数is_prime，判断一个数是不是素数。
//利用上面实现的is_prime函数，打印100到200之间的素数。
//void is_prime()
//{
//	int i = 100;
//	for (i = 100; i <= 200; i++)
//	{
//		int j = 2;
//		for (j = 2; j < i; j++)
//		{
//			if (i % j == 0)
//			{
//				break;
//			}
//		}
//		if (i == j)
//		{
//			printf("%d\n", i);
//		}
//	}
//}
//int main()
//{
//	is_prime();
//	return 0;
//}

//创建一个整形数组，完成对数组的操作
//实现函数init() 初始化数组为全0
//实现print()  打印数组的每个元素
//实现reverse()  函数完成数组元素的逆置。
//要求：自己设计以上函数的参数，返回值。
//void init(int arr[])
//{
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = 0;
//	}
//}
//
//void print(int arr[])
//{
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//int main()
//{
//	int arr[10];
//	init(arr);
//	print(arr);
//	return 0;
//}

//写一个二分查找函数
//功能：在一个升序数组中查找指定的数值，找到了就返回下标，找不到就返回 - 1.
//int bin_search(int arr[], int left, int right, int key)
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字

//int bin_search(int arr[], int left, int right, int key)
//{
//	int mid = 0;
//	int flag = 0;
//	while(left<=right)
//	{
//		mid = (left + right) / 2;
//		if (arr[mid] == key)
//		{
//			flag++;
//			return mid;//找到了就返回下标
//		}
//		else if (arr[mid] > key)
//		{
//			right = mid-1;
//		}
//		else if (arr[mid] < key)
//		{
//			left = mid+1;
//		}
//		
//	}
//	if (flag == 0)
//	{
//		return -1;
//	}
//}
//
//int main()
//{
//	int arr[10] = { 1,4,6,7,8,9,10,15,22,43 };
//	int key = 0;
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]) - 1;
//	int ret = 0;
//	printf("请输入要查找的数字：");
//	scanf("%d", &key);
//	ret = bin_search(arr, left, right,  key);
//	if (ret == -1)
//	{
//		printf("找不到");
//	}
//	else
//		printf("找到了，下标是%d", ret);
//	return 0;
//}

//#include <string.h>
//#include <stdio.h>
//char* my_strstr(const char* str1, const char* str2)
//{
//	char* cur =(char*) str1;
//	char* s1 = (char*)str1;
//	char* s2 = (char*)str2;
//	while (*cur)
//	{
//		if (*s1 != *s2)
//		{
//			cur++;
//			s1 = cur;
//			s2 = (char*)str2;
//		}
//		while ((*s1 == *s2)&& *s2)
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == 0)
//			return cur;
//	}
//	if (*cur == 0)
//		return NULL;
//
//}
//int main()
//{
//	char str1[] = "abcdcdefg";
//	char str2[] = "jhg";
//	char* ret = my_strstr(str1, str2);//用ret指针变量存放返回的地址
//	printf("%s", ret);
//	return 0;
//}

//struct S1
//{
//	char c1;  //
//	int i;
//	char c2;
//};
//int main()
//{
//	printf("%d\n", sizeof(struct S1));
//	return 0;
//}

union Un1
{
	char c[5];//  自身大小 1 编译器对齐数 8   对齐数1
	int i;    //  自身大小 4 编译器对齐数 8   对齐数4
	          // 最大成员大小5，最大对齐数是4
	          // 对齐到最大对齐数的整数倍就是8，联合体大小8
};
union Un2
{
	short c[7];// 2  8   2
	int i;     // 4  8   4
	           //最大成员大小14，最大对齐数是4，
	           //对齐到最大对齐数的整数倍就是16,联合体大小为16
};
int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}